'use strict';
var vk; // 全局vk实例
// 涉及的表名
const dbName = {
	//test: "vk-test", // 测试表
};

var db = uniCloud.database(); // 全局数据库引用
var _ = db.command; // 数据库操作符
var $ = _.aggregate; // 聚合查询操作符
/**
 * 权限注意：访问以下链接查看
 * 文档地址：https://vkdoc.fsq.pub/client/uniCloud/cloudfunctions/cloudObject.html#内置权限
 */
var cloudObject = {
	isCloudObject: true, // 标记为云对象模式
	/**
	 * 请求前处理，主要用于调用方法之前进行预处理，一般用于拦截器、统一的身份验证、参数校验、定义全局对象等。
	 * 文档地址：https://vkdoc.fsq.pub/client/uniCloud/cloudfunctions/cloudObject.html#before-预处理
	 */
	_before: async function () {
		vk = this.vk; // 将vk定义为全局对象
		// let { customUtil, uniID, config, pubFun } = this.getUtil(); // 获取工具包
		let {
			uids, //登录用户的id
			pageIndex, //第几页
			pageSize, //每页的大小
			user_id, //用户id
			token,
			plus_type, //会员类型
			os_name, //系统类型
			register_date_start, //注册时间
			register_date_end, //结束时间
			nickname, //昵称
			tg_pt //推广平台 
		} = this.getParams();
		let info = await vk.baseDao.findByWhereJson({
			dbName: "uni-id-users",
			whereJson: {
				_id: uids,
				role: _.in(['agent']), // true：存在 false：不存在
			}
		});
		if (uids == null) {
			return {
				code: -1,
				msg: `uids不能为空`
			};
		}
		if (info === null) {
			return {
				code: -1,
				msg: `没有权限访问数据`
			};
		}
		var key = "9b16d085a4f7c8e9d8c7b6a5c4e3d2c1";
		const crypto = require('crypto');
		const md5 = crypto.createHash('md5');
		let cryptostr = md5.update(uids + key).digest('hex');
		if (token != cryptostr) {
			return {
				code: -1,
				msg: `token错误,只能代理商才能获取该数据`
			};
		}
		if (pageIndex <= 0 || pageIndex == null) {
			return {
				code: -1,
				msg: `pageIndex必须大于零`
			};
		}
		if (pageSize < 0 || pageSize > 500 || pageSize == null) {
			return {
				code: -1,
				msg: `pageSize必须大于零且小于500`
			};
		}
		// if (register_date_start != null) {
		// 	const regex = /^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/; // 正则表达式
		// 	if (!regex.test(register_date_start)) {
		// 		return {
		// 			code: -1,
		// 			msg: `字符串不符合格式要求（格式要求为：yyyy-MM-dd hh:mm:ss）`
		// 		};
		// 	}
		// }
		// if (register_date_end != null) {
		// 	const regex = /^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/; // 正则表达式
		// 	if (!regex.test(register_date_end)) {
		// 		return {
		// 			code: -1,
		// 			msg: `字符串不符合格式要求（格式要求为：yyyy-MM-dd hh:mm:ss）`
		// 		};
		// 	}
		// }
	},
	/**
	 * 请求后处理，主要用于处理本次调用方法的返回结果或者抛出的错误
	 * 文档地址：https://vkdoc.fsq.pub/client/uniCloud/cloudfunctions/cloudObject.html#after-后处理
	 */
	_after: async function (options) {
		let {
			err,
			res
		} = options;
		if (err) {
			return; // 如果方法抛出错误，直接return;不处理
		}
		return res;
	},
	/**
	 * 获取列表
	 * @url admin/pages/pub/users.getList 前端调用的url参数地址
	 */
	getList: async function (data) {
		let res = {
			code: 0,
			msg: ''
		};
		let {
			uid
		} = this.getClientInfo(); // 获取客户端信息
		let {
			uids, //登录用户的id
			pageIndex, //第几页
			pageSize, //每页的大小
			user_id, //用户id
			token,
			plus_type, //会员类型
			os_name, //系统类型
			register_date_start, //注册时间
			register_date_end, //结束时间
			nickname, //昵称
			tg_pt, //推广平台
			appid,//小程序appid
		} = data;
		// if (register_date_start != null && register_date_end != null) {
		// 	register_date_start = Date.parse(register_date_start);
		// 	register_date_end = Date.parse(register_date_end);
		// }
		console.log("register_date_start",register_date_start);
		console.log("register_date_end",register_date_end);
        register_date_start=Number(register_date_start);
		register_date_end=Number(register_date_end)
		// 业务逻辑开始-----------------------------------------------------------
		let recharge_data = await vk.baseDao.select({
			dbName: "uni-id-users", // 表名
			getCount: true, // 是否需要同时查询满足条件的记录总数量，默认false
			getMain: false, // 是否只返回rows数据，默认false
			pageIndex: pageIndex, // 当前第几页
			pageSize: pageSize, // 每页条数
			whereJson: { // 条件
				invite_code: uids,
				role: _.exists(false), // true：存在 false：不存在
				plus_type,
				['register_env.os_name']: os_name,
				nickname,
				appid,
				tg_pt,
				register_date: _.gte(register_date_start).lte(register_date_end) 
			},
			// 按_id降序 asc 升序 desc 降序 
			sortArr: [{
				name: "_add_time",
				type: "desc"
			}],
		});
		res.total=recharge_data.total
		recharge_data = recharge_data.rows

		// 使用 for...of 循环，因为它允许在异步函数内使用 await
		for (const element of recharge_data) {
			// 通过tfid获取描述字段
			let tfid = element.tfid;
			console.log(`tfid${tfid}`);
			// 使用 await 来等待异步查询操作完成
			let tf_data = await vk.baseDao.select({
				dbName: "a_dy_tfurl",
				getCount: false,
				getMain: true,
				whereJson: {
					_id: tfid
				}
			});
			console.log(`投放链接数据${tf_data.desc}`);
			// 将查询结果赋值给 element.tf_data
			try {
				element.tf_data = tf_data[0].desc ;
			}catch(err){
				element.tf_data=0
			}
		}
		res.data = recharge_data;
		//查询代理商名下数据的总条数
		// res.total = await vk.baseDao.count({
		// 	dbName: "uni-id-users",// 表名
		// 	whereJson: { // 条件
		// 		invite_code: uids,
		// 		role: _.exists(false), // true：存在 false：不存在
		// 		_id: user_id,
		// 		plus_type,
		// 		['register_env.os_name']: os_name,
		// 		nickname,
		// 		appid,
		// 		tg_pt,
		// 		register_date: {
		// 			...(register_date_start != null && {
		// 				$gte: register_date_start
		// 			}),
		// 			...(register_date_end != null && {
		// 				$lte: register_date_end
		// 			})
		// 		}
		// 	}
		// });


		// 业务逻辑结束-----------------------------------------------------------
		return res;
	},
	/**
	 * 模板函数
	 * @url admin/pages/pub/users.test 前端调用的url参数地址
	 */
	test: async function (data) {
		let res = {
			code: 0,
			msg: ''
		};
		let {
			uid
		} = this.getClientInfo(); // 获取客户端信息
		// 业务逻辑开始-----------------------------------------------------------


		// 业务逻辑结束-----------------------------------------------------------
		return res;
	},
};

module.exports = cloudObject;